﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using COMExcel = Microsoft.Office.Interop.Excel;
//using Microsoft.Office.Core;
//using Microsoft.Office.Interop.Excel;

namespace ThienNamElevator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataSet ds = new DataSet();
        SqlDataAdapter da;
        SqlCommandBuilder combui;
        SqlConnection con;
        DataTable dt;
        private void Form1_Load(object sender, EventArgs e)
        {
            ketnoiCSDL();
            loadData();
        }
        private void ketnoiCSDL()
        {
            con = new SqlConnection(@"Data Source=TRUNGDINH-PC;Initial Catalog=ThiennamNhatrang;Integrated Security=True");
            con.Open();
            da = new SqlDataAdapter("select * from Table_Total", con);
            ds = new DataSet();
            da.Fill(ds, "Table_Total");
            DataGridView1.DataSource = ds.Tables["Table_Total"];
            /*
            string sql = "select * from Table_Nhanvien";
            SqlCommand com = new SqlCommand(sql, con);
            com.CommandType = CommandType.Text;
            da = new SqlDataAdapter(com);
            dt = new DataTable();
            da.Fill(dt);
            con.Close();
            DataGridView1.DataSource = dt;
             * */
            
        }

        private void loadData()
        {
            txtID.DataBindings.Clear();
            txtID.DataBindings.Add("Text", DataGridView1.DataSource, "manv");

            txtTen.DataBindings.Clear();
            txtTen.DataBindings.Add("Text", DataGridView1.DataSource, "ten");

            txtLuongcoban.DataBindings.Clear();
            txtLuongcoban.DataBindings.Add("Text", DataGridView1.DataSource, "luongcoban");

            txtPhucap.DataBindings.Clear();
            txtPhucap.DataBindings.Add("Text", DataGridView1.DataSource, "phucap");

            txtTongluong.DataBindings.Clear();
            txtTongluong.DataBindings.Add("Text", DataGridView1.DataSource, "tongluong");

        }
        private void DataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                DataGridView1.CurrentRow.Selected = true;
            }
            catch (Exception ex)
            { }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }

        private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void giớiThiệuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            About abform = new About();
            abform.ShowDialog();
        }

        private void xuấtDữLiệuRaFileExcelToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnExcelfile.PerformClick();
        }

        private void DataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            DataGridView1.Rows[e.RowIndex].Cells["stt"].Value = e.RowIndex + 1;
        }

        private void btnSavetoDatabase_Click(object sender, EventArgs e)
        {
            try
            {
                combui = new SqlCommandBuilder(da);
                da.Fill(ds, "Table_Total");
                da.Update(ds, "Table_Total");
                //MessageBox.Show("Cập nhật dữ liệu thành công"); 
            }
            catch (Exception ex)
            { 
                MessageBox.Show("Không thể Update CSDL vào lúc này!", "Thông báo!", MessageBoxButtons.OK);
            }
            finally
            {
                ketnoiCSDL();
                loadData();
                con.Close();
            }

        }

        private void btnExcelfile_Click(object sender, EventArgs e)
        {
            btnSavetoDatabase.PerformClick();
            ExportToExcel excel = new ExportToExcel();

            // Lấy về nguồn dữ liệu cần Export là 1 DataTable
            // DataTable này mỗi bạn lấy mỗi khác. 
            // Ở đây tôi dùng BindingSouce có tên bs nên tôi ép kiểu như sau:
            // Bạn nào gán trực tiếp vào DataGridView thì ép kiểu DataSource của
            // DataGridView nhé 
            DataTable dt = (DataTable)DataGridView1.DataSource;

            excel.Export(dt, "Danh sach", "DANH SÁCH TIỀN LƯƠNG CÔNG TY THANG MÁY THIÊN NAM");
        }

        private void nhậpCơSởDữLiệuToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            CSDL csdlfrm = new CSDL();
            csdlfrm.ShowDialog();
        }

        private void lưuVàoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnSavetoDatabase.PerformClick();
        }

        private void resetCơSởDữLiệuToolStripMenuItem1_Click(object sender, EventArgs e)
        {

        }

    }

    //new class
    public class ExportToExcel
    {

        public void Export(DataTable dt, string sheetName, string title)
        {
            //Tạo các đối tượng Excel
            Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks oBooks;
            Microsoft.Office.Interop.Excel.Sheets oSheets;
            Microsoft.Office.Interop.Excel.Workbook oBook;
            Microsoft.Office.Interop.Excel.Worksheet oSheet;

            //Tạo mới một Excel WorkBook 
            oExcel.Visible = true;
            oExcel.DisplayAlerts = false;
            oExcel.Application.SheetsInNewWorkbook = 1;
            oBooks = oExcel.Workbooks;

            oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
            oSheets = oBook.Worksheets;
            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1);
            oSheet.Name = sheetName;

            // Tạo phần đầu nếu muốn
            Microsoft.Office.Interop.Excel.Range head = oSheet.get_Range("A1", "H1");
            head.MergeCells = true;
            head.Value2 = title;
            head.Font.Bold = true;
            head.Font.Name = "Tahoma";
            head.Font.Size = "13";
            head.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

            // Tạo tiêu đề cột 
            Microsoft.Office.Interop.Excel.Range cl1 = oSheet.get_Range("A3", "A3");
            cl1.Value2 = "Mã nhân viên";
            cl1.ColumnWidth = 15.0;

            Microsoft.Office.Interop.Excel.Range cl2 = oSheet.get_Range("B3", "B3");
            cl2.Value2 = "Họ và tên";
            cl2.ColumnWidth = 40.0;

            Microsoft.Office.Interop.Excel.Range cl3 = oSheet.get_Range("C3", "C3");
            cl3.Value2 = "Lương cơ bản";
            cl3.ColumnWidth = 30.0;
            
            Microsoft.Office.Interop.Excel.Range cl4 = oSheet.get_Range("D3", "D3");
            cl4.Value2 = "Phụ cấp";
            cl4.ColumnWidth = 30.0;
            
            Microsoft.Office.Interop.Excel.Range cl5 = oSheet.get_Range("E3", "E3");
            cl5.Value2 = "Tổng lương";
            cl5.ColumnWidth = 30.0;

            Microsoft.Office.Interop.Excel.Range cl6 = oSheet.get_Range("F3", "F3");
            cl6.Value2 = "Tổng giờ làm Hệ số 1";
            cl6.ColumnWidth = 30.0;

            Microsoft.Office.Interop.Excel.Range cl7 = oSheet.get_Range("G3", "G3");
            cl7.Value2 = "Tổng giờ làm Hệ số 2";
            cl7.ColumnWidth = 30.0;

            Microsoft.Office.Interop.Excel.Range cl8 = oSheet.get_Range("H3", "H3");
            cl8.Value2 = "Tổng giờ làm Hệ số 3";
            cl8.ColumnWidth = 30.0;

            Microsoft.Office.Interop.Excel.Range rowHead = oSheet.get_Range("A3", "H3");
            rowHead.Font.Bold = true;
            // Kẻ viền
            rowHead.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Thiết lập màu nền
            rowHead.Interior.ColorIndex = 15;
            rowHead.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;


            // Tạo mẳng đối tượng để lưu dữ toàn bồ dữ liệu trong DataTable,
            // vì dữ liệu được được gán vào các Cell trong Excel phải thông qua object thuần.
            object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];

            //Chuyển dữ liệu từ DataTable vào mảng đối tượng
            for (int r = 0; r < dt.Rows.Count; r++)
            {
                DataRow dr = dt.Rows[r];
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    arr[r, c] = dr[c];
                }
            }

            //Thiết lập vùng điền dữ liệu
            int rowStart = 4;
            int columnStart = 1;

            int rowEnd = rowStart + dt.Rows.Count - 1;
            int columnEnd = dt.Columns.Count;

            // Ô bắt đầu điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowStart, columnStart];
            // Ô kết thúc điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnEnd];
            // Lấy về vùng điền dữ liệu
            Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);

            //Điền dữ liệu vào vùng đã thiết lập
            range.Value2 = arr;

            // Kẻ viền
            range.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Căn giữa cột STT
            Microsoft.Office.Interop.Excel.Range c3 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnStart];
            Microsoft.Office.Interop.Excel.Range c4 = oSheet.get_Range(c1, c3);
            oSheet.get_Range(c3, c4).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

        }

    }
}
